package com.engine.salary.sys.service;

import com.engine.salary.sys.config.SysConfig;
import com.engine.salary.sys.entity.param.AppSettingSaveParam;
import com.engine.salary.sys.entity.param.OrderRuleParam;
import com.engine.salary.sys.entity.po.SalarySysConfPO;
import com.engine.salary.sys.entity.vo.AppSettingVO;
import com.engine.salary.sys.entity.vo.OrderRuleVO;
import com.engine.salary.sys.entity.vo.UploadConfigResponse;
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 薪酬系统配置类
 * <p>Copyright: Copyright (c) 2022</p>
 * <p>Company: 泛微软件</p>
 *
 * @author qiantao
 * @version 1.0
 **/
public interface SalarySysConfService {


    /**
     * 操作是否需要申报功能
     *
     * @param flag 开启 0/关闭 1/重新开启 2
     * @return 执行结果
     */
    boolean operateTaxDeclarationFunction(TaxDeclarationFunctionEnum flag);

    /**
     * 是否关闭了个税申报功能
     * @return BOOLEAN
     */
    TaxDeclarationFunctionEnum getTaxDeclaration();

    SalarySysConfPO getOneByCode(String code);

    String getValueByCode(String code);

    List<SalarySysConfPO> listSome(SalarySysConfPO build);

    void save(SalarySysConfPO salarySysConfPO);

    void update(SalarySysConfPO salarySysConfPO);

    SalarySysConfPO getById(Long id);

    void updateByCode(SalarySysConfPO salarySysConfPO);

    OrderRuleVO orderRule();

    void updateOrderRule(OrderRuleParam param);

    void saveMatchEmployeeModeRule(String rule);


    /**
     * 保存应用设置
     * @param param
     */
    void saveAppSetting(AppSettingSaveParam param);

    /**
     * 应用设置
     * @return
     */
    AppSettingVO appSetting();

    /**
     * 保存加密设置
     * @param appSettingSaveParam
     * @return
     */
    Map<String, Object> saveEncryptSetting(AppSettingSaveParam appSettingSaveParam);

    /**
     * 加密进度
     * @param progressId
     * @return
     */
    Map<String, Object> getEncryptProgress(String progressId);

    boolean encryptIsOpen();
    void cleanEncryptStatus();

    /**
     * @description 获取个税申报功能重启日期
     * @return Date
     * @author Harryxzy
     * @date 2022/11/9 21:07
     */
    Date getTaxDeclarationRebootDate();

    /**
     * 保存薪资核算、社保福利核算人员规则
     * @param rule
     */
    void saveSalaryAcctEmployeeRule(String rule);

    /**
     * 个税申报撤回开关
     * @param param
     */
    void saveWithDrawTaxDeclaration(SalarySysConfPO param);

    /**
     * 保存档案删除规则
     * @param setting
     */
    void saveArchiveDelete(String setting);

    /**
     * 保存或者更新
     * @param salarySysConfPO
     */
    void operate(SalarySysConfPO salarySysConfPO);

    /**
     * 保存工资单反馈
     * @param param
     */
    void saveSalarySendFeedback(SalarySysConfPO param);

    /**
     * 根据code返回list
     * @param codes
     * @return
     */
    List<SalarySysConfPO> getListByCodes(List<String> codes);

    /**
     * 保存或者修改应用设置
     * @param confValue
     * @param confKey
     * @param title
     * @param app
     */
    void saveSettingByType(String confValue, String confKey, String title, String app);

    SysConfig getConfig();

    UploadConfigResponse.Result parseConfig(SysConfig config);
}
